/**
 * API场景组合测试工具 - 主要JavaScript文件
 */

// 通用函数
function showAlert(message, type = 'success') {
    const alertDiv = $('<div>')
        .addClass(`alert alert-${type} alert-dismissible fade show`)
        .attr('role', 'alert')
        .html(`
            ${message}
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        `);
    
    $('#alert-container').append(alertDiv);
    
    // 5秒后自动关闭
    setTimeout(() => {
        alertDiv.alert('close');
    }, 5000);
}

// 格式化日期时间
function formatDateTime(dateTimeStr) {
    if (!dateTimeStr) return '';
    const date = new Date(dateTimeStr);
    return date.toLocaleString('zh-CN');
}

// 初始化代码编辑器
function initCodeEditor(elementId, mode = 'javascript') {
    if (typeof ace !== 'undefined' && document.getElementById(elementId)) {
        const editor = ace.edit(elementId);
        editor.setTheme('ace/theme/monokai');
        editor.session.setMode(`ace/mode/${mode}`);
        editor.setOptions({
            fontSize: '14px',
            showPrintMargin: false,
            enableBasicAutocompletion: true,
            enableLiveAutocompletion: true
        });
        return editor;
    }
    return null;
}

// 初始化拖放排序
function initSortable(elementId, onUpdateCallback) {
    if (typeof Sortable !== 'undefined' && document.getElementById(elementId)) {
        return new Sortable(document.getElementById(elementId), {
            handle: '.step-handle',
            animation: 150,
            onUpdate: onUpdateCallback
        });
    }
    return null;
}

// 轮询执行状态
function pollExecutionStatus(executionId, onStatusChange) {
    const intervalId = setInterval(() => {
        $.get(`/execution/${executionId}/status`, function(response) {
            if (response.status !== 'RUNNING') {
                clearInterval(intervalId);
            }
            if (onStatusChange) {
                onStatusChange(response);
            }
        });
    }, 2000);
    
    return intervalId;
}

// 格式化JSON
function formatJson(json) {
    if (typeof json === 'string') {
        try {
            json = JSON.parse(json);
        } catch (e) {
            return json;
        }
    }
    return JSON.stringify(json, null, 2);
}

// 高亮显示JSON
function highlightJson(jsonStr, elementId) {
    if (typeof hljs !== 'undefined' && document.getElementById(elementId)) {
        try {
            const formattedJson = formatJson(jsonStr);
            const element = document.getElementById(elementId);
            element.textContent = formattedJson;
            hljs.highlightElement(element);
        } catch (e) {
            console.error('JSON高亮显示失败:', e);
        }
    }
}

// 页面加载完成后执行
$(document).ready(function() {
    // 添加全局AJAX错误处理
    $(document).ajaxError(function(event, jqXHR, settings, error) {
        console.error('AJAX请求失败:', error);
        showAlert(`请求失败: ${error}`, 'danger');
    });
    
    // 创建警告容器
    if ($('#alert-container').length === 0) {
        $('<div id="alert-container" class="position-fixed top-0 end-0 p-3" style="z-index: 1050;"></div>').appendTo('body');
    }
    
    // 初始化工具提示
    $('[data-bs-toggle="tooltip"]').tooltip();
    
    // 初始化弹出框
    $('[data-bs-toggle="popover"]').popover();
});